/* Identifiers for target types */
enum {
GTK_TREE_MODEL_ROW,
- TEXT_URI_LIST
+ TEXT_URI_LIST,
+ XDND_DIRECT_SAVE
};
/* Target types for dragging from the shortcuts list */
/* Target types for dropping into the shortcuts list */
static const GtkTargetEntry dnd_drop_targets [] = {
{ "GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_WIDGET, GTK_TREE_MODEL_ROW },
- { "text/uri-list", 0, TEXT_URI_LIST }
+ { "text/uri-list", 0, TEXT_URI_LIST },
+ { "XdndDirectSave0", 0, XDND_DIRECT_SAVE } /* XDS Protocol Type */
};
/* Drag and drop interface declarations */
GtkTreeIter iter;
gboolean res;
gboolean drop_as_bookmarks;
+ gboolean valid_xds_drag;
char *drop_target_uri = NULL;
action = 0;
drop_as_bookmarks = FALSE;
+ valid_xds_drag = FALSE;
path = NULL;
if (!sidebar->drag_data_received) {
sidebar->drag_data_info == GTK_TREE_MODEL_ROW) {
/* Dragging bookmarks always moves them to another position in the bookmarks list */
action = GDK_ACTION_MOVE;
+ } else if (sidebar->drag_data_received &&
+ sidebar->drag_data_info == XDND_DIRECT_SAVE) {
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (sidebar->store), &iter, path);
+ gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store),
+ &iter,
+ PLACES_SIDEBAR_COLUMN_URI, &drop_target_uri,
+ -1);
+ valid_xds_drag = TRUE;
} else {
/* URIs are being dragged. See if the caller wants to handle a
* file move/copy operation itself, or if we should only try to
}
out:
- if (action != 0) {
+ if (action != 0 || valid_xds_drag) {
check_switch_location_timer (sidebar, drop_target_uri);
start_drop_feedback (sidebar, path, pos, drop_as_bookmarks);
} else {